/* Program konwersji taśmy PIĄTKOWEJ na THETA lub odwrotnie --*/
;  Asemblacja:
;	ustawić ASMPARM (przyciski 9...21 akumulatora):
;	- A.bit21 = 0 --> konwersja PIĄTKOWY na THETA
;		  = 1 --> konwersja THETA na PIĄTKOWY
;	- A.bit20 = 0 --> wejście z czytnika PTR0 lub PTR0'
;		  = 1 --> wejście z czytnika PTR2 lub PTR2'
;  Uruchomienie z pulpitu:
;	z adresu 17500
;  Wyniki:
;	A  = różnica symetryczna sumy kontrolnej i zliczonej
;	Stop z kodem 0 i nawrotem do ponownego wykonania
;  Rejestry robocze:
;	A  = słowo kodu
;	B7 = zliczana suma słów kodu
;	B1 - roboczy, licznik pętli
;	B6 = roboczy, adres powrotu z podprogramu (ślad)
/*------------------------------------------------------------*/

szerWej	EQU	(ASMPARM & 1) && 8 || 5		;szer.taśmy wej.
szerWyj	EQU	13-szerWej	;ile bitów w rządku wyjściowym
długWej	EQU	40/szerWej	;ile rządków na słowo wejściowe
długWyj	EQU	40/szerWyj	;ile rządków na słowo wyjściowe
urzWej	EQU	(ASMPARM & 2) + ((szerWej==8) && 8)	;nr PTR
urzWyj	EQU	5 + ((szerWej==5) && 8)			;nr PTP

;---------------------------------------------------------------

KONWERS	BLOK	0c17500
adrSumy	EQU	0c17574		;adres w pilocie sumy kontrolnej

	B7 = A = 0		;wyzerowanie słowa A i sumy w B7

szukPil	EQU	*	;Szukanie pilota
	A  = A << szerWej	;ustawienie V
	We	urzWej		;V bez zmiany; wczytanie rządka
	SkNV	szukPil		;jeśli nie nadmiar to szukać dalej

			;A = pilot :000 aaaaa 00000 00
	Wy	urzWyj		;wypisanie rządka NU przed pilotem
	SkSB	B6,wySłowo	;wypisanie pilota A
	A - adrSumy		;jeśli to pilot sumy kontrolnej
	SkR	jestSum		;      to przepisanie sumy

nastSło	EQU	*	;Po pilocie danych
	SkSB	B6,weSłowo	;wczytanie słowa
	SkV	jestDan		;gdy nadmiar, to słowo danych
	SkZ	brakSum..szukPil	;koniec taśmy, lub pilot
jestDan	EQU	*
	B7 = A + B7		;zliczanie sumy kontrolnej słów
	SkSB	B6,wySłowo ..nastSło	;wypisanie słowa, i dalej

brakSum	EQU	*	;Gdy koniec taśmy bez sumy kontrolnej
	B1 = (długWyj-1)	;licznik rządków
	Wy	urzWyj		;wypisanie rządka NU
	SkLC	B1--,-- ..różnica

jestSum	EQU	*	;Po pilocie sumy kontrolnej
	SkSB	B6,weSłowo	;wczytanie sumy kontrolnej
	SkSB	B6,wySłowo	;wypisanie sumy kontrolnej
;
różnica	A  = A ^ B7		;różnica symetryczna sum
	Stop	0	..KONWERS

;---------------------------------------------------------------

weSłowo	EQU	*	;Wczytywanie rządków słowa do A
	B1 = A = (długWej-1)	;śmieć w A zniknie
weRząd	A  = A << szerWej	;ustawienie V
	We	urzWej		;V bez zmiany, ustawienie Z
	SkLC B1--,weRząd	;V bez zmiany, Z bez zmiany
powrót	Nic  0		..B6	;Powrót z ustawionymi warunkami

;---------------------------------------------------------------

wySłowo	EQU	*	;Wyprowadzanie rządków słowa
	A  = A >>> 1		;najmłodszy bit na bit Omega
	A  = A + [jedynka]	;wstawienie jedynki na bit znaku
	Wy	urzWyj		;wyprowadzenie pierwszego rządka
	A  = A <<< 1		;usunięcie początkowej jedynki
	A  = A + OM		;przywrócenie najmłodszego bitu
	A  = A >>< (39-(szerWyj-1))	;bity rządka na koniec A
	B1 = (długWyj-1-1)	;licznik pozostałych rządków
wyRząd	EQU	*
	Wy	urzWyj		;wyprowadzenie rządka
	A  = A >>< (39-szerWyj)	;przesunięcie go na koniec A
	SkLC	B1--,wyRząd ..powrót
jedynka	:400 00000 00000 00	;jedynka na bicie znaku

;---------------------------------------------------------------

	Koniec
---